A storage system can be networked and shared among one or more computing devices, which can be clients of the storage system. The storage system generally includes multiple storage devices or storage resources, including interconnecting hardware and control hardware. The control hardware may be referred to as a storage server, which is a special-purpose processing device used to store and retrieve data on behalf of the clients, which may access and/or process the data. The storage system provides a filesystem and/or other software to manage the data storage area of the storage resources. The data storage area is often divided into data blocks, which are managed by the filesystem. The filesystem determines how and where data will be stored and retrieved. The storage resources can be organized into one or more groupings (physical and/or logical or virtual) of redundant array of inexpensive/independent disks/drives (RAID). The data may be organized, managed, and/or accessed as data files. The data alternatively may be organized and managed and/or accessed as data blocks, which may include more or less information than a file. Hence, the storage server may be a file server that provides clients with file-level access to data, and/or a storage server that provides clients with block-level access to stored data.
A storage server can have access to multiple mass storage devices, i.e., persistent/non-volatile storage devices, which may be managed based on logical or virtual organization. Data storage across these multiple mass storage devices can be organized into multiple layers of abstraction to provide fault tolerance, as individual disks can (and do) fail. The abstraction layers also allow a logical disk organization, for example, a volume or aggregate, to store larger quantities of data than can fit on a single disk.
For example, a storage server may represent a group of storage devices (e.g., hard disks) as a logical aggregate/grouping of storage devices. The aggregates may be managed to store data in volumes contained within the aggregates. As used herein, “volume” refers to a logical abstraction of physical storage, combining one or more disks or parts of disks into a single logical storage object. The volumes may in turn be further logically broken down into plexes containing RAID groups. The RAID groups may use storage from multiple, separate disks. While particular terminology is used herein as a reference point to describe particular organizations and/or functions herein, the terminology shall not be construed as limiting, but rather by way of example. Where particular terminology is referred to (e.g., an aggregate, a plex, etc.), these are to be understood as merely examples of data structure abstractions that may be substituted with equivalent or similar data structures that may be referred to by other terms.
A filesystem includes a format that affects how data is stored and/or retrieved. The format, features and/or level of performance of a filesystem may be changed as developments in the technology surrounding the storage system change. Thus, a filesystem in a storage server may be changed from one version to another during the operational life of the storage server. Changing a filesystem version may be performed in connection with a filesystem upgrade, or a filesystem revert (changing back to a previous version, e.g., for testing, or if the upgrade results in errors). Although upgrade of a filesystem can occur on the fly, the mechanisms involved in changing filesystem versions have traditionally been custom builds for revert. Newer versions of a filesystem generally understand the older version, or are “backwards compatible” with the older version of the filesystem. However, older versions of a filesystem traditionally do not understand the newer version of the filesystem. Thus, revert is an asymmetric process, meaning that traditionally every upgrade and revert is a custom design that can be difficult to test, difficult to design, and time consuming. Reverting a filesystem to a different version traditionally requires taking the system offline, reverting to the older format, and then rebooting with the older filesystem. Additionally, changing from one filesystem to another is traditionally thought of in terms of changing versions of the same filesystem. Traditionally there is no mechanism to change on the fly from one filesystem type to a different type of filesystem. Therefore, there may be significant cost in terms of time and money associated with a filesystem version change.